home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Development / Source / tarsrc Folder / pref.c < prev    next >
Text File  |  1993-11-27  |  4KB  |  149 lines

  1. /*
  2.  * Macintosh Tar
  3.  *
  4.  * The routines in this file deal with the preference file.
  5.  *
  6.  * Written by Craig Ruff.
  7.  */
  8.  
  9. #include "tar.h"
  10. #include <Folders.h>
  11. #include <GestaltEqu.h>
  12.  
  13. char    *prefName = "\pTarPrefs";
  14. long    prefDirID = 2;
  15. short    prefVRefNum = 0;
  16.  
  17. struct pref pref;
  18.  
  19. GetPreferences()
  20. {
  21.     long        mask;
  22.     struct pref    upref;
  23.     HParamBlockRec    volpb;
  24.     HParamBlockRec    fpb;
  25.     
  26.     /*
  27.      * Make some defaults incase we don't find any later.
  28.      */
  29.     pref.autoPage = false;
  30.     pref.cvtNl = false;
  31.     pref.dosCvt = false;
  32.     pref.doPrint = false;
  33.     pref.floppy = false;
  34.     pref.oldArch = false;
  35.     pref.blocking = 20;
  36.     pref.blockSize = pref.blocking * RECORDSIZE;
  37.     memcpy(pref.creator, "MPS ", 4);
  38.     memcpy(pref.type, "TEXT", 4);
  39.     pref.doOverWrite = false;
  40.     pref.tape = false;
  41.     TapeDefaults(&pref.tapeVars);
  42.     if (
  43.         (Gestalt(gestaltFindFolderAttr, &mask) != noErr) ||
  44.         !(mask & (1 << gestaltFindFolderPresent)) ||
  45.         (FindFolder(0, kPreferencesFolderType, false,
  46.                 &prefVRefNum, &prefDirID) != noErr)
  47.     ) {
  48.         /*
  49.          * Find the 'Blessed Folder' as per TN 67.
  50.          */
  51.         volpb.volumeParam.ioCompletion = nil;
  52.         volpb.volumeParam.ioNamePtr = nil;
  53.         volpb.volumeParam.ioVRefNum = 0;
  54.         volpb.volumeParam.ioVolIndex = 0;
  55.         PBHGetVInfo(&volpb, false);
  56.         if (volpb.volumeParam.ioResult == noErr) {
  57.             prefDirID = volpb.volumeParam.ioVFndrInfo[1];
  58.             prefVRefNum = volpb.volumeParam.ioVRefNum;
  59.         }
  60.     }
  61.     
  62.     fpb.fileParam.ioCompletion = nil;
  63.     fpb.fileParam.ioNamePtr = prefName;
  64.     fpb.fileParam.ioVRefNum = prefVRefNum;
  65.     fpb.fileParam.ioFVersNum = 0;
  66.     fpb.fileParam.ioDirID = prefDirID;
  67.     fpb.ioParam.ioPermssn = fsRdPerm;
  68.     fpb.ioParam.ioMisc = nil;
  69.     if (PBHOpen(&fpb, false) == noErr) {
  70.         fpb.ioParam.ioBuffer = (Ptr) &upref;
  71.         fpb.ioParam.ioReqCount = sizeof(upref);
  72.         fpb.ioParam.ioPosMode = fsFromStart;
  73.         fpb.ioParam.ioPosOffset = 0;
  74.         if (
  75.             (PBRead((ParmBlkPtr) &fpb, false) == noErr) &&
  76.             (fpb.ioParam.ioActCount == sizeof(pref))
  77.         ) {
  78.             memcpy(&pref, &upref, sizeof(pref));
  79.         }
  80.         
  81.         PBClose((ParmBlkPtr) &fpb, false);
  82.     }
  83. }
  84.  
  85. /*
  86.  * SavePreferences - save them in a preference file
  87.  */
  88. SavePreferences()
  89. {
  90.     OSErr        err;
  91.     HParamBlockRec    fpb;
  92.     char        *routine = "\pSavePreferences";
  93.     
  94.     fpb.fileParam.ioCompletion = nil;
  95.     fpb.fileParam.ioNamePtr = prefName;
  96.     fpb.fileParam.ioVRefNum = prefVRefNum;
  97.     fpb.fileParam.ioFVersNum = 0;
  98.     fpb.fileParam.ioDirID = prefDirID;
  99.     err = PBHCreate(&fpb, false);
  100.     if ((err != noErr) && (err != dupFNErr)) {
  101.         OSAlert(routine, "\pPBHCreate", prefName,
  102.                 fpb.fileParam.ioResult);
  103.         return;
  104.     }
  105.     
  106.     fpb.fileParam.ioCompletion = nil;
  107.     fpb.fileParam.ioNamePtr = prefName;
  108.     fpb.fileParam.ioVRefNum = prefVRefNum;
  109.     fpb.fileParam.ioDirID = prefDirID;
  110.     fpb.fileParam.ioFVersNum = 0;
  111.     fpb.fileParam.ioFDirIndex = 0;
  112.     if (PBHGetFInfo(&fpb, false)) {
  113.         OSAlert(routine, "\pPBHGetFInfo", prefName,
  114.                 fpb.fileParam.ioResult);
  115.         return;
  116.     }
  117.  
  118.     memcpy(&fpb.fileParam.ioFlFndrInfo.fdCreator, "TAR ", 4);
  119.     memcpy(&fpb.fileParam.ioFlFndrInfo.fdType, "PREF", 4);
  120.     fpb.fileParam.ioCompletion = nil;
  121.     fpb.fileParam.ioNamePtr = prefName;
  122.     fpb.fileParam.ioVRefNum = prefVRefNum;
  123.     fpb.fileParam.ioDirID = prefDirID;
  124.     fpb.fileParam.ioFVersNum = 0;
  125.     if (PBHSetFInfo(&fpb, false)) {
  126.         OSAlert(routine, "\pPBHSetFInfo", prefName,
  127.                 fpb.fileParam.ioResult);
  128.         return;
  129.     }
  130.  
  131.     fpb.ioParam.ioPermssn = fsWrPerm;
  132.     fpb.ioParam.ioMisc = nil;
  133.     if (PBHOpen(&fpb, false) != noErr) {
  134.         OSAlert(routine, "\pPBHOpen", prefName,
  135.                 fpb.fileParam.ioResult);
  136.         return;
  137.     }
  138.     
  139.     fpb.ioParam.ioBuffer = (Ptr) &pref;
  140.     fpb.ioParam.ioReqCount = sizeof(pref);
  141.     fpb.ioParam.ioPosMode = fsFromStart;
  142.     fpb.ioParam.ioPosOffset = 0;
  143.     if ((err = PBWrite((ParmBlkPtr) &fpb, false)) != noErr)
  144.         OSAlert(routine, "\pPBWrite", prefName, err);
  145.     
  146.     PBClose((ParmBlkPtr) &fpb, false);
  147. }
  148.  
  149.